﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Insifo.BE.Gen;
using Insifo.DL.Gen;
using Insifo.DL;

namespace Insifo.BL.Gen
{
    public class BLCentroCosto
    {
        DLCentroCosto _dl = new DLCentroCosto();
        DLTransactionMng _transaccion = null;
        /// <summary>
        /// Método obtiene la lista
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet Listar(BECentroCosto pbe)
        {
            return _dl.Listar(pbe);
        }

        /// <summary>
        /// Método obtiene las CentroCostos 
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet Listar_Sel(BECentroCosto pbe)
        {
            return _dl.Listar_Sel(pbe);
        }

        /// <summary>
        /// Método obtiene las CentroCostos por Usuario
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet ListarPorUsuario(string pstrUsuario)
        {
            return _dl.ListarPorUsuario(pstrUsuario);
        }

        /// <summary>
        /// Método que obtiene un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BECentroCosto Obtener(BECentroCosto pbe)
        {
            //Obtiene el detalle de salida
            return _dl.Obtener(pbe);

        }


        /// <summary>
        /// Método que actualiza un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BECentroCosto Actualizar(BECentroCosto pbe)
        {
            BECentroCosto oBe = new BECentroCosto();
            try
            {
                _transaccion = DLTransactionMng.Begin();
                oBe = _dl.Actualizar(pbe);
                if (oBe.IdCentroCosto > 0)
                {
                    if (oBe.TransaccionSpring == "S")
                    {
                        pbe.IdCentroCosto = oBe.IdCentroCosto;
                        _dl.ActualizarSpring(pbe);
                    }
                }
                _transaccion.Commit();
            }
            catch (Exception ex)
            {
                _transaccion.RollBack();
                throw ex;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return oBe;
        }

        /// <summary>
        /// Método que actualiza un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BECentroCosto Insertar(BECentroCosto pbe)
        {
            BECentroCosto oBe = new BECentroCosto();
            _transaccion = DLTransactionMng.Begin();          
            try
            {
                _dl.Transaction = _transaccion;
                oBe = _dl.Insertar(pbe);
                if (oBe.IdCentroCosto > 0)
                {
                    if (oBe.TransaccionSpring == "S")
                    {
                        pbe.IdCentroCosto = oBe.IdCentroCosto;
                        _dl.InsertarSpring(pbe);
                    }
                }
                _transaccion.Commit();
            }
            catch (Exception e)
            {

                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return oBe;
        }

        /// <summary>
        /// Método que elimina logicamente un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BECentroCosto Eliminar(BECentroCosto pbe)
        {
            BECentroCosto oBe = new BECentroCosto();
            _transaccion = DLTransactionMng.Begin();

            try
            {
                _dl.Transaction = _transaccion;
                oBe = _dl.Eliminar(pbe);
                if (oBe.Error == 0 && pbe.IdCentroCosto > 0 && !string.IsNullOrEmpty(pbe.CodigoCentroCosto))
                {
                    if (oBe.TransaccionSpring == "S")
                    {
                        pbe.IdCentroCosto = oBe.IdCentroCosto;
                        _dl.EliminarSpring(pbe);
                    }

                }
                _transaccion.Commit();

            }
            catch (Exception e)
            {

                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return _dl.Eliminar(pbe);
        }
    }
}


